热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring基础>spring自定义初始化(一)

这里我们简单的实现一下spring中的初始化bean,以大概了解他的流程。受委屈几乎是一个人成长最快的途径,吃下去的是委屈,消化掉后得到的是格局。spring的自定义初始化测试的项

  这里我们简单的实现一下spring中的初始化bean,以大概了解他的流程。受委屈几乎是一个人成长最快的途径,吃下去的是委屈,消化掉后得到的是格局。

spring的自定义初始化

测试的项目结构如下:

技术分享

一、定义两个简单的Bean对象

  • FirstBean.java,变量需要set方法:
技术分享技术分享
package com.spring1.bean;

public class FirstBean {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserInfo() {
        return username + ", " + password;
    }
}
FirstBean.java
  •  SecondBean.java,变量需要set方法:
技术分享技术分享
package com.spring1.bean;

public class SecondBean {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getUserInfo() {
        return name + ", " + age;
    }
}
SecondBean.java

二、定义一个管理Bean的工厂类BeanFactory

package com.spring1.factory;

import java.util.HashMap;
import java.util.Map;

public class BeanFactory {
    Map map = new HashMap<>();

    public Object getBean(String key) {
        return map.get(key);
    }

    public  T getBean(String key, Class tClass) {
        return (T) map.get(key);
    }

    public void setBean(String name, Object object) {
        map.put(name, object);
    }
}

三、定义一个解析xml文件,并把初始化的bean存放到beanFactory的类

package com.spring1.parse;

import com.spring1.SpringUtil;
import com.spring1.factory.BeanFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.List;

public class ParseXmlBean {
    public static BeanFactory parseXmlBean(String filepath) {
        BeanFactory beanFactory = new BeanFactory();
        SAXReader reader = new SAXReader();
        try {
            InputStream stream = ParseXmlBean.class.getClassLoader().getResourceAsStream(filepath);
            Document document = reader.read(stream);
            Element rootElement = document.getRootElement();
            List entries = rootElement.elements("bean");
            for (Element entry : entries) {
                String beanId = entry.attributeValue("id");
                String beanClass = entry.attributeValue("class");
                Class bean = Class.forName(beanClass);
                Object beanObject = bean.newInstance();
                for (Object subEntry : entry.elements("property")) {
                    String name = ((Element) subEntry).attributeValue("name");
                    String value = ((Element) subEntry).attributeValue("value");
                    String dataType = ((Element) subEntry).attributeValue("dataType");
                    Method method;
                    if (dataType == null) {
                        method = bean.getMethod(getMethodName(name), new Class[]{String.class});
                        method.invoke(beanObject, new Object[]{value});
                    } else if (dataType.equals("int")) {
                        method = bean.getMethod(getMethodName(name), new Class[]{int.class});
                        method.invoke(beanObject, new Object[]{Integer.valueOf(value)});
                    }
                }
                beanFactory.setBean(beanId, beanObject);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return beanFactory;
    }

    private static String getMethodName(String name) {
        return "set" + SpringUtil.firstLetterUpper(name);
    }
}

四、一个简单的工具类

package com.spring1;

public class SpringUtil {
    public static String firstLetterUpper(String name) {
        return name.substring(0, 1).toUpperCase() + name.substring(1);
    }
}

五、测试的主体类如下

package com.spring1.main;

import com.spring1.bean.FirstBean;
import com.spring1.bean.SecondBean;
import com.spring1.factory.BeanFactory;
import com.spring1.parse.ParseXmlBean;
import org.junit.Test;

public class MainTest {
    @Test
    public void test_1() {
        BeanFactory beanFactory = ParseXmlBean.parseXmlBean("config/bean.xml");
        FirstBean firstBean = beanFactory.getBean("firstBean", FirstBean.class);
        String userInfo = firstBean.getUserInfo();
        System.out.println(userInfo);

        SecondBean secondBean = (SecondBean) beanFactory.getBean("secondBean");
        String userInfo1 = secondBean.getUserInfo();
        System.out.println(userInfo1);
    }
}

运行的结果如下:

huhx, 1234
liuling, 21

六、测试的xml文件如下

<beans>
    <bean id="firstBean" class="com.spring1.bean.FirstBean">
        <property name="username" value="huhx"/>
        <property name="password" value="1234"/>
    bean>

    <bean id="secondBean" class="com.spring1.bean.SecondBean">
        <property name="age" value="21" dataType="int"/>
        <property name="name" value="liuling"/>
    bean>
beans>
友情链接

spring自定义初始化(一),mamicode.com" target="_blank">spring基础---->spring自定义初始化(一)


推荐阅读
  • 第1章选择流程控制语句1.1顺序结构的基本使用1.1.1顺序结构概述是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
  • 本文深入分析了在使用JavaScript中的Date.UTC()方法初始化Date对象时,getDay()方法返回值与预期不符的原因,并提供了相应的解决方案。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • 本文介绍了Linux内核中TCP的三种接收队列:Prequeue、sk_receive_queue和Backlog。这些队列在数据包处理过程中扮演着重要角色,帮助提高系统性能和效率。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • index.js全部js兼容性处理。js内引入babelpolyfill全部js兼容性处理。babelpolyfillimportbabelpolyfill;constadd ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
author-avatar
小熊维尼-b晴
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有